// 主程序的入口
/*
通过在package.json文件里面配置： 
    "scripts": {
        "start": "node src/app.js"
    } 实现；
node src/app.js 这个命令的作用是让 Node.js 执行 src 目录下的 app.js 文件
*/


import inquirer from 'inquirer'  //导入 inquirer 库进行命令交互
import chalk from 'chalk'

import { queryWeather } from './utils/weather.js'  //导入查询天气函数

// 主菜单交互
function mainMenu() {
    console.log(chalk.green('\n===== 天气查询工具 ====='))

    // 用 inquirer 发起交互，返回 Promise
    inquirer.prompt([
        {
            type: 'list',
            name: 'action',
            message: '请选择操作:',
            choices: [
                { name: '查询天气', value: 'query' },
                { name: '退出', value: 'exit' }
            ]
        }
    ])
        .then(answers => {
            //获取用户选择的操作
            const action = answers.action

            switch (action) {
                case 'query':
                    return handleWeatherQuery()
                case 'exit':
                    console.log(chalk.blue(' 再见！'))
                    process.exit(0)
            }
        })
        .catch(err => {
            console.log(chalk.red(`[错误]：程序出错：${err.message}`))
            //终止当前进程并指定退出状态码的方法
            process.exit(1)
        }
        )
}

// 天气查询流程处理
function handleWeatherQuery() {
    // 1. 第一步：询问城市名
    return inquirer.prompt([
        {
            type: 'input',
            name: 'city',
            message: '请输入城市名:',
            validate: (input) => {
                if (!input.trim()) {
                    return '城市名不能为空，请重新输入'
                }
                return true
            }
        }
    ])
        .then(answers => {
            // 2. 第二步：获取城市名并调用查询函数
            const city = answers.city.trim()
            // 返回查询函数的Promise，连接到下一个.then()
            return queryWeather(city)
        })
        .then(() => {
            // 3. 第三步：查询完成后，询问是否继续
            return inquirer.prompt([
                {
                    type: 'confirm',
                    name: 'continueQuery',
                    message: '是否继续查询其他城市?',
                    default: true
                }
            ])
        })
        .then(answers => {
            // 4. 第四步：根据用户选择决定返回主菜单或退出
            if (answers.continueQuery) {
                // 返回主菜单的Promise，继续链式调用
                return mainMenu()
            } else {
                console.log(chalk.blue(' 再见！'))
                process.exit(0)
            }
        })
}

//启动程序
mainMenu()